home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d939.lha / IanUtils / SetColor.2.2.s < prev    next >
Text File  |  1993-12-20  |  9KB  |  450 lines

  1.     BRA.S    SetColor
  2.  
  3.     Include    Libs/Exec.lib
  4.     Include    Libs/Dos.lib
  5.     Include    Libs/Intuition.lib
  6.     Include    Libs/Graphics.lib
  7.  
  8. SetColor    MOVEM.L    D0-D7/A0-A6,-(A7)    ; Save registers
  9.  
  10.     MOVE.L    A0,A3    ; Save argument information
  11.     LEA    (A0,D0),A4
  12.  
  13.     OpenLib    Dos    ; Open Libraries
  14.     OpenLib    Graphics
  15.     OpenLib    Intuition
  16.  
  17.     SUB.L    #Space,A7    ; Set up data area
  18.     MOVE.L    A7,A5
  19.  
  20.     BSR    Initialize
  21.     BSR    Arguments
  22.     BSR    Colormap
  23.  
  24. Exit    CloseLib    Intuition    ; Close libraries
  25.     CloseLib    Graphics
  26.     CloseLib    Dos
  27.  
  28.     MOVE.L    A5,A7    ; Nuke data area
  29.     ADD.L    #Space,A7
  30.     
  31.     MOVE.L    RC(A5),(A7)
  32.     MOVEM.L    (A7)+,D0-D7/A0-A6    ; Restore registers
  33.     RTS
  34.  
  35. Initialize    MOVE.L    A3,ArgList(A5)    ; Save argument information
  36.     MOVE.L    A4,ArgEnd(A5)
  37.     CLR.L    RC(A5)
  38.  
  39.     Dos    Output        ; Get Standard Output Channel
  40.     MOVE.L    D0,StdOutput(A5)
  41.  
  42.     Dos    Input
  43.     MOVE.L    D0,StdInput(A5)
  44.  
  45.     MOVEQ    #31,D7
  46. ClearColors    MOVE.B    #-1,Red(A5,D7)    ; Set all colors to -1
  47.     MOVE.B    #-1,Green(A5,D7)
  48.     MOVE.B    #-1,Blue(A5,D7)    ; This will mean "don't change"
  49.     DBF    D7,ClearColors
  50.  
  51.     CLR.B    WhatScreen(A5)    ; Set WhatScreen to WB Screen as default
  52.     CLR.L    WaitSecs(A5)        ; Set Wait period to no wait
  53.  
  54.     RTS
  55.  
  56. ;----------------------------------------------------------------
  57.  
  58. Arguments    MOVE.L    ArgList(A5),A0
  59.     CMP.B    #10,(A0)    ; Is input just a return?
  60.     BEQ    DispInfo
  61.  
  62.     CMP.B    #"?",(A0)    ; Is input a question mark?
  63.     BNE.S    Not.QM
  64.     CMP.B    #" ",1(A0)
  65.     BLE    Input    ; If space/tab/return, show template
  66.  
  67. Not.QM    MOVE.L    ArgEnd(A5),A1
  68.     BSR    Capitalize
  69.  
  70. Check    MOVE.L    ArgList(A5),A0
  71.  
  72. CheckNext
  73.  
  74. CheckDec    CMP.B    #"0",(A0)
  75.     BLT.S    Not.Dec
  76.     CMP.B    #"9",(A0)
  77.     BGT.S    Not.Dec
  78. DecColor    BSR    GetDec
  79.     BRA.S    GotColorNum
  80. Not.Dec
  81.  
  82. CheckHex    CMP.B    #"$",(A0)
  83.     BNE    Not.Hex
  84. HexColor    BSR    GetHex
  85. GotColorNum    MOVE.L    D0,D7
  86.     BLT    BadColorNum    ; If less than zero
  87.     CMP.L    #31,D7
  88.     BGT    BadColorNum    ; If greater than 31
  89.     TST.B    (A0)+
  90.     CMP.B    #"$",(A0)
  91.     BEQ.S    HexValue
  92.  
  93. DecComps    BSR    GetDec
  94.     MOVE.L    D0,D4
  95.     BLT    BadColorComp
  96.     TST.B    (A0)+
  97.     BSR    GetDec
  98.     MOVE.L    D0,D5
  99.     BLT    BadColorComp
  100.     TST.B    (A0)+
  101.     BSR    GetDec
  102.     MOVE.L    D0,D6
  103.     BLT    BadColorComp
  104.  
  105.     CMP.B    #16,D4
  106.     BGE    BadColorComp
  107.     CMP.B    #16,D5
  108.     BGE    BadColorComp
  109.     CMP.B    #16,D6
  110.     BGE    BadColorComp
  111.  
  112.     MOVE.B    D4,Red(A5,D7)    ; Put components in
  113.     MOVE.B    D5,Green(A5,D7)
  114.     MOVE.B    D6,Blue(A5,D7)
  115.     BRA    NextArg
  116.  
  117. HexValue    BSR    GetHex
  118.     CMP.L    #$FFF,D0
  119.     BHI    BadColorVal
  120.     ROR.W    #8,D0        ; Put components in
  121.     MOVE.B    D0,Red(A5,D7)
  122.     CLR.B    D0
  123.     ROL.W    #4,D0
  124.     MOVE.B    D0,Green(A5,D7)
  125.     CLR.B    D0
  126.     ROL.W    #4,D0
  127.     MOVE.B    D0,Blue(A5,D7)
  128.     BRA.S    NextArg
  129. Not.Hex
  130.  
  131. CheckWB    LEA    keyWB(PC),A1
  132.     BSR    Keyword
  133.     TST.L    D0
  134.     BEQ.S    Not.WB
  135.     CMP.B    #" ",(A0)
  136.     BGT.S    Not.WB
  137.     CLR.B    WhatScreen(A5)    ; Set WhatScreen to 0
  138.     BRA.S    NextArg
  139. Not.WB
  140.  
  141. CheckFRONT    LEA    keyFRONT(PC),A1
  142.     BSR    Keyword
  143.     TST.L    D0
  144.     BEQ.S    Not.FRONT
  145.     CMP.B    #" ",(A0)
  146.     BGT.S    Not.FRONT
  147.     MOVE.B    #-1,WhatScreen(A5)    ; Set WhatScreen to 1
  148.     BRA.S    NextArg
  149. Not.FRONT
  150.  
  151. CheckACTIVE    LEA    keyACTIVE(PC),A1
  152.     BSR    Keyword
  153.     TST.L    D0
  154.     BEQ.S    Not.ACTIVE
  155.     CMP.B    #" ",(A0)
  156.     BGT.S    Not.ACTIVE
  157.     MOVE.B    #1,WhatScreen(A5)    ; Set WhatScreen to 1
  158.     BRA.S    NextArg
  159. Not.ACTIVE    
  160.  
  161. CheckWAIT    LEA    keyWAIT(PC),A1
  162.     BSR    Keyword
  163.     TST.L    D0
  164.     BEQ.S    Not.WAIT
  165.     BSR    GetDec
  166.     MOVE.L    D0,WaitSecs(A5)    ; Set WaitSecs to WAIT=n value
  167. ;    BRA.S    NextArg
  168. Not.WAIT
  169.  
  170. FindEnd    CMP.B    #" ",(A0)
  171.     BLE.S    NextArg
  172.     TST.B    (A0)+
  173.     BRA.S    FindEnd
  174.  
  175. NextArg    CMP.B    #" ",(A0)
  176.     BGT    CheckNext    ; If a valid character, proceed
  177.     BLT.S    NoMoreArgs    ; If a return ($0A) encountered
  178.     TST.B    (A0)+
  179.     BRA.S    NextArg
  180. NoMoreArgs    RTS
  181.  
  182. ;-------------------------------------------------------------------
  183.  
  184. Colormap    MOVE.L    WaitSecs(A5),D4
  185.     BLE.S    NoDelay
  186.     LSL.L    D4
  187.     SUBQ.L    #1,D4
  188.     CMP.L    #$FFFF,D4
  189.     BLE.S    OkDelay
  190.     MOVE.L    #$FFFF,D4
  191.  
  192. OkDelay    MOVEQ    #0,D0
  193.     MOVEQ    #-1,D1
  194.     Exec    SetSignal
  195.  
  196.     BTST    #SIGBREAKB_CTRL_C,D0
  197.     BNE    Break
  198.     BTST    #SIGBREAKB_CTRL_F,D0
  199.     BNE    Abort
  200.  
  201.     MOVEQ    #TICKS_PER_SECOND/2,D1    ; Check each half second
  202.     Dos    Delay
  203.     DBF    D4,OkDelay
  204.  
  205. NoDelay    MOVE.L    _IntuitionBase(PC),A0
  206.     TST.B    WhatScreen(A5)
  207.     BGT.S    .ACTIVE
  208.     BLT.S    .FRONT
  209.     Intuition    OpenWorkBench    ; Get Workbench Screen Pointer
  210.     MOVE.L    D0,A4
  211.     BRA.S    StartColors
  212. .FRONT    MOVE.L    ib_FirstScreen(A0),A4
  213.     BRA.S    StartColors
  214. .ACTIVE    MOVE.L    ib_ActiveScreen(A0),A4
  215.  
  216. StartColors    MOVEQ    #0,D0
  217.     MOVEQ    #-1,D1
  218.     Exec    SetSignal
  219.  
  220.     BTST    #SIGBREAKB_CTRL_C,D0    ; One last chance
  221.     BNE    Break
  222.     
  223.     MOVEQ    #31,D7
  224. NextColor    LEA    44(A4),A0    Put viewport in proper place
  225.     MOVE.L    D7,D0    Put register in proper place
  226.  
  227.     MOVEQ    #0,D1    Set all of D1-D3 to zero
  228.     MOVEQ    #0,D2
  229.     MOVEQ    #0,D3
  230.  
  231.     MOVE.B    Red(A5,D7),D1    Get red byte
  232.     BLT.S    DoNotChange
  233.     MOVE.B    Green(A5,D7),D2    Get green byte
  234.     BLT.S    DoNotChange
  235.     MOVE.B    Blue(A5,D7),D3    Get blue byte
  236.     BLT.S    DoNotChange
  237.     
  238.     Graphics    SetRGB4        Set the color
  239.  
  240. DoNotChange    DBF    D7,NextColor
  241.  
  242.     RTS
  243.  
  244. GetDec    MOVEQ    #0,D0
  245.     MOVEQ    #0,D1
  246.  
  247. NextDecDigit    MOVE.B    (A0)+,D0
  248.     SUB.B    #"0",D0
  249.     MULU.W    #10,D1
  250.     ADD.L    D0,D1
  251.     MOVE.B    (A0),D0
  252.     CMP.B    #"9",D0
  253.     BGT.S    DecDigError
  254.     CMP.B    #"0",D0
  255.     BGE.S    NextDecDigit
  256.     CMP.B    #",",D0
  257.     BEQ.S    EndDecOK
  258.     CMP.B    #" ",D0
  259.     BLE.S    EndDecOK
  260. DecDigError    MOVEQ    #-1,D0
  261.     RTS
  262. EndDecOK    MOVE.L    D1,D0
  263.     RTS
  264.  
  265. GetHex    MOVEQ    #0,D0
  266.     MOVEQ    #0,D1
  267.     TST.B    (A0)+    ; Skip "$"
  268.  
  269. NextHexDigit    MOVE.B    (A0)+,D0
  270.     CMP.B    #"A",D0
  271.     BGE.S    HexLetter
  272. HexNumber    SUB.B    #"0",D0
  273.     BRA.S    UseHexDigit
  274. HexLetter    SUB.B    #"A"-10,D0
  275. UseHexDigit    LSL.L    #4,D1
  276.     ADD.L    D0,D1
  277.     MOVE.B    (A0),D0
  278.     CMP.B    #"F",D0
  279.     BGT.S    HexDigError
  280.     CMP.B    #"A",D0
  281.     BGE.S    NextHexDigit
  282.     CMP.B    #"9",D0
  283.     BGT.S    HexDigError
  284.     CMP.B    #"0",D0
  285.     BGE.S    NextHexDigit
  286.     CMP.B    #",",D0
  287.     BEQ.S    EndHexOK
  288.     CMP.B    #" ",D0
  289.     BLE.S    EndHexOK
  290. HexDigError    MOVEQ    #-1,D0
  291.     RTS
  292. EndHexOK    MOVE.L    D1,D0
  293.     RTS
  294.     
  295.  
  296. Input    MOVE.L    StdOutput(A5),D1
  297.     LEA    Template(PC),A0
  298.     MOVE.L    A0,D2
  299.     MOVE.L    #Template.-Template,D3
  300.     Dos    Write        ; Write template
  301.  
  302.     MOVE.L    StdInput(A5),D1
  303.     MOVE.L    ArgList(A5),D2
  304.     MOVE.L    #$100,D3        256 byte input buffer
  305.     Dos    Read        ; Read input
  306.  
  307.     MOVE.L    ArgList(A5),A0
  308.     LEA    (A0,D0),A0
  309.     MOVE.L    A0,ArgEnd(A5)
  310.     BRA    Arguments
  311.  
  312. DispInfo    MOVE.L    StdOutput(A5),D1
  313.     LEA    Info(PC),A0
  314.     MOVE.L    A0,D2
  315.     MOVE.L    #Info.-Info,D3
  316.     Dos    Write
  317.     BRA    Exit
  318.  
  319. Break    MOVE.L    StdOutput(A5),D1
  320.     LEA    BreakText(PC),A0
  321.     MOVE.L    A0,D2
  322.     MOVEQ    #BreakText.-BreakText,D3
  323.     Dos    Write
  324.     MOVE.L    #10,RC(A5)
  325.     BRA    Exit
  326.  
  327. Abort    MOVE.L    StdOutput(A5),D1
  328.     LEA    AbortText(PC),A0
  329.     MOVE.L    A0,D2
  330.     MOVEQ    #AbortText.-AbortText,D3
  331.     Dos    Write
  332.     MOVE.L    #5,RC(A5)
  333.     BRA    NoDelay
  334.  
  335. BadColorNum    MOVE.L    StdOutput(A5),D1
  336.     LEA    BadReg(PC),A0
  337.     MOVE.L    A0,D2
  338.     MOVEQ    #BadReg.-BadReg,D3
  339.     Dos    Write
  340.     BRA.S    ErrExit
  341.  
  342. BadColorComp    MOVE.L    StdOutput(A5),D1
  343.     LEA    BadComp(PC),A0
  344.     MOVE.L    A0,D2
  345.     MOVEQ    #BadComp.-BadComp,D3
  346.     Dos    Write
  347.     BRA.S    ErrExit
  348.  
  349. BadColorVal    MOVE.L    StdOutput(A5),D1
  350.     LEA    BadVal(PC),A0
  351.     MOVE.L    A0,D2
  352.     MOVEQ    #BadVal.-BadVal,D3
  353.     Dos    Write
  354. ErrExit    MOVE.L    #10,RC(A5)
  355.     BRA    Exit
  356.  
  357. ;------------Keyword recognition function    11/29/91
  358. ;    Affects:    A0/A1/D0
  359.  
  360. ;    Input:    A0=Text to be checked
  361. ;        A1=Keyword to be checked against
  362. ;    Output:    D0=Length of text if match
  363. ;        D0=0 if no match
  364. ;        A0=End of text if match
  365. ;        A0=Start of text if no match
  366. ;        A1=Start of text if match
  367.  
  368. Keyword    MOVEQ    #0,D0
  369.     MOVE.L    A0,-(A7)
  370. .loop    CMP.B    (A0)+,(A1)+
  371.     BNE.S    .no
  372.     ADDQ.L    #1,D0
  373.     TST.B    (A1)
  374.     BNE.S    .loop
  375.     MOVE.L    (A7)+,A1
  376.     RTS
  377. .no    MOVE.L    (A7)+,A0
  378.     MOVEQ    #0,D0
  379.     RTS
  380.  
  381. ;------------Capitalization function    11/29/91
  382. ;    Affects:    A0/A1/D0
  383.  
  384. ;    Input:    A0=Start of text to be capitalized
  385. ;        A1=End of text to be checked
  386. ;    Output:    All lowercase letters between A0 and A1 are uppercased
  387.  
  388. Capitalize    MOVE.B    (A0),D0
  389.     CMP.B    #"a",D0    ; Is it less than "a"?
  390.     BLT.S    .NotSmall
  391.     CMP.B    #"z",D0    ; Is it greater than "z"?
  392.     BGT.S    .NotSmall
  393.     SUB.B    #32,D0    ; Capitalize it.
  394. .NotSmall    MOVE.B    D0,(A0)+
  395.     CMP.L    A1,A0
  396.     BLT.S    Capitalize
  397.     RTS
  398.  
  399.     RSRESET
  400. ArgList    RS.L    1
  401. ArgEnd    RS.L    1
  402. StdOutput    RS.L    1
  403. StdInput    RS.L    1
  404. RC    RS.L    1
  405. WaitSecs    RS.L    1
  406. Red    RS.B    32
  407. Green    RS.B    32
  408. Blue    RS.B    32
  409. WhatScreen    RS.B    1    0=WBScreen,+=ActiveScreen
  410. Space    RS.W    0
  411.  
  412. keyWAIT    DC.B    "WAIT=",0
  413. keyWB    DC.B    "WB",0
  414. keyFRONT    DC.B    "FRONT",0
  415. keyACTIVE    DC.B    "ACTIVE",0
  416.  
  417.     DC.B    "$VER: SetColor 2.2 (12/18/91)",0
  418.  
  419. Info    DC.B    10,27,"[32mSetColor 2.2 ",27,"[0m- Colormap Control Utility - © 1991 Ian Einman",10,10
  420.     DC.B    "SetColor WAIT=4 0,3,0,9 sets background to dark blue in 4 seconds",10
  421.     DC.B    "SetColor 17,$000 18,$000 19,$000 blacks out mouse",10,10
  422.     DC.B    27,"[33m",9,"Ian Einman",10
  423.     DC.B    9,"Attn:  Product Registration",10
  424.     DC.B    9,"16810 McRae Road",10
  425.     DC.B    9,"Arlington, WA 98223",10,10,27,"[0m"
  426.     DC.B    "If you have no documentation, register by sending me $3.00.",10
  427.     DC.B    "You will recieve instructions and future info regarding updates.",10,10
  428. Info.
  429.  
  430. Template    DC.B    "WAIT=/N,WB/S,FRONT/S,ACTIVE/S,(REG/N,$RGB/N)/M,(REG/N,R/N,G/N,B/N)/M: "
  431. Template.
  432.  
  433. BreakText    DC.B    "***Break",10
  434. BreakText.
  435.  
  436. AbortText    DC.B    "***Wait aborted",10
  437. AbortText.
  438.  
  439. BadReg    DC.B    "Color register out of range (0 to 31; $00 to $1F)",10
  440. BadReg.
  441.  
  442. BadComp    DC.B    "Color component out of range (0 to 15)",10
  443. BadComp.
  444.  
  445. BadVal    DC.B    "Color value out of range ($000-$FFF)",10
  446. BadVal.
  447.  
  448. BadPreset    DC.B    "Color preset name not recognized",10
  449. BadPreset.
  450.